package com.xbongbong.saas.factory.publicrule;

import com.alibaba.fastjson.JSONArray;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.saas.domain.entity.CustomerRuleEntity;

import java.util.List;

/**
 * 校验、数据获取公共接口
 *
 * @author : chy
 * @version v3.22
 * @date 创建时间：2018-5-16 下午4:20:34
 */
public interface IOperateRuleValue {

    /**
     * 校验格式是否正确
     *
     * @param ruleValue
     * @throws XbbException 创建时间： 2018-5-18 上午9:19:18
     *                      修改时间： 2018-5-18 上午9:19:18 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    void verify(String ruleValue) throws XbbException;

    /**
     * 将存库的String转换成object
     *
     * @param rule
     * @return 创建时间： 2018-5-17 下午1:55:56
     * 修改时间： 2018-5-17 下午1:55:56 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    Object toObject(CustomerRuleEntity rule);

    /**
     * 获取开启状态
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    Integer getStatus(CustomerRuleEntity customerRule);

    /**
     * 获取有合同设置
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    Integer getContract(CustomerRuleEntity customerRule);

    /**
     * 获取有机会设置
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    Integer getOpportunity(CustomerRuleEntity customerRule);

    /**
     * 获取有客户状态设置
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    JSONArray getCustomerStatus(CustomerRuleEntity customerRule);

    /**
     * 获取子类型（所有客户统一设置、根据客户状态设置、根据客户重要程度）
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    Integer getType(CustomerRuleEntity customerRule);

    /**
     * 获取数值的数组配置
     *
     * @param customerRule
     * @return 创建时间： 2018-5-18 上午11:27:54
     * 修改时间： 2018-5-18 上午11:27:54 chy
     * @author chy
     * @version v3.22
     * @since v3.22
     */
    JSONArray getRestrict(CustomerRuleEntity customerRule);

    /**
     * 获取当前选中的所有特殊员工id
     *
     * @param ruleObject
     * @return
     * @创建时间 2018年8月21日 上午10:51:20
     * @修改时间 2018年8月21日 上午10:51:20
     * @author chy
     * @version v3.28
     * @since v3.28
     */
    List<String> getAllSpecialUser(Object ruleObject);


    /**
     * 获取规则配置中的标签Id
     *
     * @param ruleObject
     * @return
     */
    List<Long> getCustomerLabelIds(Object ruleObject);
}
